<?php
/**
 * Created on 22/07/2010
 * Modelo Autenticação com sessão
 * @author Renato Lenz Costalima
 */
class TICE_Util_AutenticadorSessao {

	public $nomeSessao
				, $campoLogin
				, $acl
				, $session
				, $erros = array();
				
	public $modelo;

	/**
	 * @param string $nomeSessao onde vai ficar armazenado o usuário
	 * @param PC4_Crud_Abstrato $modelo
	 * @param Zend_Acl $acl
	 * @param CI_Session $session
	 */
	function __construct($nomeSessao = 'usuarios', $campoLogin = 'login', $modelo = null, $sessao = null) {
		if (empty($modelo)) {
			$modelo = new PC4_Crud_Abstrato($nomeSessao); // utiliza a tabela com mesmo nome da sessão
		}
		if (empty($sessao)) {
			$CI =& get_instance();
			$sessao = $CI->session;
		}

		$this->modelo = $modelo;
		$this->nomeSessao = $nomeSessao;
		$this->session = $sessao;
		$this->campoLogin = $campoLogin;
	}
	
	/**
	 * Inicia uma sessão mediante login e senha
	 * (Deixa entrar)
	 * @return bool
	 */
	function logar($login, $senha, $papel = '', $campoPapel = 'role') {
		$this->logout();
		$campoLogin = $this->campoLogin;
		$onde = array(
			$campoLogin => $login
			, 'senha' => md5($senha)
		);
		if (!empty($papel)) {
			$onde[$campoPapel] = $papel;
		}
		$rs = $this->modelo->consulta($onde, 1, 1);
		if (!empty($rs) && $rs[0]->$campoLogin == $login) {
			$this->setUsuario((array)$rs[0]);
		}
		else {
			$this->addErro('Login ou senha inválidos!');
		}
		return $this->taLogado();
	}

	/**
	 * Termina a sessão
	 * (Deixa sair, veIrEmbora)
	 */
	function logout() {
		$this->session->unset_userdata($this->nomeSessao);
		$this->session->unset_userdata($this->nomeSessao . '_erros');
	}
	
	/**
	 * Recupera o usuário da sessão
	 * @return array $usuario
	 */
	function getUsuario() {
		$usuario = $this->session->userdata($this->nomeSessao);
		return $usuario;		
	}
	/**
	 * Altera o usuário da sessão
	 */
	function setUsuario($usuario) {
		$this->session->set_userdata($this->nomeSessao, (array)$usuario);
	}
	
	/**
	 * Verifica se está logado
	 */
	function taLogado() {
		$usuario = $this->getUsuario();
		if (!empty($usuario)) {
			return true;
		}
		else {
			return false;
		}
	}
	
	function getErros() {
		$erros = $this->session->userdata($this->nomeSessao . '_erros');
		return $erros;		
		
	}
	function setErros($erros) {
		$this->session->set_userdata($this->nomeSessao . '_erros', $erros);
	}
	function addErro($erro) {
		$erros = $this->getErros();
		$erros[] = $erro;
		$this->setErros($erros);
	}
	
	function atualiza() {
		$usuario = $this->getUsuario();
		$usuario = $this->modelo->ve($usuario['id']);
		$this->setUsuario($usuario);
		return $usuario;
	}	
	
}
?>